Modern computer systems are frequently implemented as distributed collections of computer systems operating collectively within one or more host computer system environments. Frequently, software applications must be built in such systems to support multiple environments such as, for example, multiple versions of a compiler, multiple languages, multiple different target operating systems, or to target multiple browser interfaces. Maintaining large fleets of physical hardware for such builds can be expensive as the physical hardware may stand idle for significant portions of a day, but even in situations where the physical hardware is used to build software applications frequently, maintaining such systems can be complex, expensive, and time consuming.
One solution to this physical hardware problem is to use virtual machine instances to host application builds. However, a full virtual machine instance that is dedicated to building software applications may remain idle for long periods of time and may also be complex to keep updated. Additionally, sharing resources such as source code and libraries between such builds, saving intermediate build results, synchronizing build states (so that, for example, a source code error can be quickly identified and the build cancelled), exercising such builds, and providing build results can add to the expense and complexity of such virtual application building systems. This expense and complexity can become more significant when a customer may be launching tens or even hundreds of such builds per day, causing delays, resource bottlenecks, and performance slowdowns, leading to a degraded customer experience, increased costs, and poor resource utilization.